package com.heaven.service;

import com.heaven.core.entity.VideoEntity;
import com.heaven.core.framework.PzService;
import com.heaven.customerServer.customerController.vo.login.LoginRes;
import com.heaven.customerServer.customerController.vo.video.*;

import java.util.List;

public interface VideoService extends PzService<VideoEntity> {

    /**
     * 立即投稿视频
     * @param req 视频信息
     * @param userId 用户ID
     */
    void publishVideo(PublishVideoReq req, String userId);

    PlayVideoByIdRes getPlayVideoById(String id, boolean loginStatus, LoginRes.UserSession userSession);

    /** 初始化video实体，设置 url和coverPicture 的正确链接*/
    VideoEntity initVideo(VideoEntity video);

    /**
     * 获取视频分类名称
     * @param catId 分类ID {一级Cid}-{二级Cid}-{三级Cid}
     * @return 分类名称
     */
    String getVideoCategoryName(String catId);

    /**
     * 首页推荐视频
     * @return 3个推荐视频
     */
    List<RecommendVideosRes> recommendVideos();

    /**
     * 获取用户发布的视频
     * @param page 页码
     * @param size 页大小
     * @param userId 用户ID
     * @return 用户发布的视频列表
     */
    List<OwnVideoRes> listOwnVideos(int page, int size, String userId);

    /**
     * 处理点赞视频
     * @param videoId 视频Id
     * @return 登录用户是否点赞视频，1为已点赞，0为未点赞
     */
    int handleLike(String videoId, String userId);

    /**
     * 处理播放量
     * @return 播放token
     */
    String handlePlayCount(PlayCountReq req);

    VideoEntity selectById(String videoId);

    /**
     * 判断视频是否存在于minio
     * @param videoObjectName 视频 minio 对象名称
     * @return true 存在，false 不存在
     */
    boolean isVideoExistInMinio(String videoObjectName);
}
